package br.com.pfc.mobile.comunicao;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.util.Log;
import br.com.pfc.mobile.transferobject.ItensTabelaTO;
import br.com.pfc.mobile.transferobject.ProdutoTO;
import br.com.pfc.mobile.transferobject.RegiaoTO;
import br.com.pfc.mobile.transferobject.TabelaPrecoTO;

public class ComunicacaoTabelaPreco  extends Comunicacao{

	private static final String METHOD_LISTARTABELAS = "listarTabelasPreco";
	private static final String SOAP_ACTION =  "http://webservice.siac/";
	
	public TabelaPrecoTO[] listarTabelasPreco(RegiaoTO[] regioes){
		
		SoapObject request = getSoapObject(METHOD_LISTARTABELAS);
		for (int i = 0; i < regioes.length; i++) {
			RegiaoTO regiao = new RegiaoTO(regioes[i].getCodigo());
			PropertyInfo pi = new PropertyInfo();
			pi.setName("regioes");

			pi.setValue(regiao);
			pi.setType(RegiaoTO[].class);
			request.addProperty(pi);
			
		}
		SoapSerializationEnvelope envelope = getEnvelope();
		HttpTransportSE transport = new HttpTransportSE(URL);
		TabelaPrecoTO[] listaTabelasTO = null;
		try {
			//chamando o webservice
			transport.call(SOAP_ACTION + METHOD_LISTARTABELAS, envelope);
			//pegando o retorno
			Vector<SoapObject> response = (Vector<SoapObject>) envelope.getResponse();
			
			if(response != null){			

				listaTabelasTO = new TabelaPrecoTO[response.size()]; 
				for (int i = 0; i < response.size(); i++) {
					SoapObject soap = response.get(i);
					TabelaPrecoTO tabela = new TabelaPrecoTO();
					tabela.setCodigo(Integer.parseInt(soap.getProperty(TabelaPrecoTO.PROP_CODIGO).toString()));
					tabela.setNome(soap.getProperty(TabelaPrecoTO.PROP_NOME).toString());					
					tabela.setDescricao(soap.getProperty(TabelaPrecoTO.PROP_DESCRICAO).toString());
					SoapObject soapRegiao = (SoapObject) soap.getProperty(TabelaPrecoTO.PROP_REGIAO);
					tabela.setRegiao(new RegiaoTO(Integer.parseInt(soapRegiao.getProperty(RegiaoTO.PROP_CODIGO).toString())));
					
					List<ItensTabelaTO> itens = new ArrayList<ItensTabelaTO>();
					for (int j = 0; j < soap.getPropertyCount(); j++) {
						if(soap.getProperty(j) instanceof SoapObject){
							SoapObject soapObject = (SoapObject)soap.getProperty(j); 
							if(soapObject.hasProperty(ItensTabelaTO.PROP_SERIAL)){
								Long serial = Long.parseLong(soapObject.getProperty(ItensTabelaTO.PROP_SERIAL).toString());
								if(serial.equals(ItensTabelaTO.getSerialversionUID())){
									ItensTabelaTO item = new ItensTabelaTO();
									item.setCodigo(Integer.parseInt(soapObject.getProperty(ItensTabelaTO.PROP_CODIGO).toString()));
									item.setPreco(String.valueOf(Double.parseDouble(soapObject.getProperty(ItensTabelaTO.PROP_PRECO).toString())));
									SoapObject soapProduto = (SoapObject) soapObject.getProperty(ItensTabelaTO.PROP_PRODUTO);
									ProdutoTO produto = new ProdutoTO();
									produto.setCodigo(Integer.parseInt(soapProduto.getProperty(ProdutoTO.PROP_CODIGO).toString()));
									produto.setDescricao(soapProduto.getProperty(ProdutoTO.PROP_DESCRICAO).toString());
									produto.setNome(soapProduto.getProperty(ProdutoTO.PROP_NOME).toString());
									produto.setPeso(soapProduto.getProperty(ProdutoTO.PROP_PESO).toString());
									produto.setQuantidade(Integer.parseInt(soapProduto.getProperty(ProdutoTO.PROP_QUANTIDADE).toString()));
									item.setProduto(produto);
									itens.add(item);
								}
							}
						}							
					}
					ItensTabelaTO[] listaItens = new ItensTabelaTO[itens.size()];
					for (int j = 0; j < itens.size(); j++) {
						listaItens[j] = itens.get(j);
					}
					tabela.setItens(listaItens);
					listaTabelasTO[i] = tabela;
				}
			}
			
		} catch (Exception e) {
			Log.i("PFC","erro no ws: " + e.getMessage());
		}
		return listaTabelasTO;
	
	}
}
